package com.annotation;

import java.lang.annotation.*;

/**
 * @功能：自定义注解
 * @版本： V1
 * @版权： 信息技术有限公司（http://www.mychery.com/）
 * @作者： 磐石战队开发组  00355760
 * @日期： 2024/8/10 14:00
 */
@MyAnnotation
public class demo02 {

    @MyAnnotation
    public void test02() {
    }

    // 注解可以显示赋值， 如果没有默认值，我们就必须给注解赋值
    // 注解参数的顺序随意
    @MyAnnotation2(age = 18, name = "jacky")
    public void test() {
    }

    @MyAnnotation3("jacky")
    public void test2() {
    }
}

/**
 * @author 00355760
 */ // 自定义一个简单的注解
//@Target           表示我们的注解可以用在哪些地方
//@Retention        表示我们的注解在什么地方有效
//@Documented       表示是否将我们的注解生成在Javadoc中
//@Inherited        表示子类可以继承父类的注解
@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Inherited
@interface MyAnnotation {
}

/**
 * @author 00355760
 */ // 元注解
@interface 注解名称 {
    // 属性列表
}

/**
 * @author 00355760
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation2 {
    // 注解的参数: 参数类型 + 参数名 + ();
    String name() default "";

    int age() default 0;

    int id() default -1;

    String[] schools() default {"peking university"};
}

/**
 * @author 00355760
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation3 {
    // 如果注解参数为value赋值时可以直接写值
    String value();
}
